%% 函数说明：多领域交叉结构中的次序交叉法（OX）
%% 举例：
%   parent1 = [1,2,3,4,5,6,7,8,9],parent2 = [5,4,6,9,2,1,7,8,3]
%   假设选中的元件序号r1=3,r2=6,则生成的子代sequen = [9,2,3,4,5,6,1,7,8]
function sequen = LSO_MNSC_OX(parent1,parent2)
     
     %% 随机选择父代1两个元件，保留父代1选中的两个元件序号之间的元件作为子代
        r1 = randperm(length(parent1),1);
        r2 = randperm(length(parent2),1);
%         r1 = 3;%测试用
%         r2 = 6;
        m = min(r1,r2)+1;
        M = max(r1,r2)-1;
%         if M<length(parent1)-3
%             M = m+3;
%         end
        num = 1;
        for i = 1:length(parent1)
            if parent1(i) < m || parent1(i) > M
                parent1(i) = 0;%不在两个序号之间的元件序号全部设为0
                left(num)= i;%记录剔除掉的元件位置
                num = num+1;
            end
        end
        parent1_child = parent1;%parent1的子代
        parent1_left = parent1_child;
        parent1_left(find(parent1_left == 0)) = [];%保留的元件
       %% parent1保留的元件在父代parent2中的位置全部清除
        for j = 1:length(parent1_left)
            parent2(find(parent2 == parent1_left(j))) = [];
        end
        parent2_left = parent2;
        %% parent2剩余的元件按顺序放入parent1_child,生成最终的子代
        parent1_child(left) = parent2_left;
        sequen = parent1_child;
end